Skip to content

feat: 내 제품 vs 경쟁사 비교 분석 (+ 실데이터 크롤링/Gemini 동작)#35

Merged
trz-21 merged 2 commits into
mainfrom
feature/issue-34-my-vs-competitor
Jun 16, 2026
Merged

feat: 내 제품 vs 경쟁사 비교 분석 (+ 실데이터 크롤링/Gemini 동작)#35
trz-21 merged 2 commits into
mainfrom
feature/issue-34-my-vs-competitor

Conversation

@trz-21

@trz-21 trz-21 commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Closes #34

작업 요약

링크 입력을 내 제품 URL(필수) + 경쟁 상품 URL(1~3개) 로 구분해 받고, 두 제품군 리뷰를 비교하여 내 제품에서 개선할 점을 도출하도록 기능을 전환했다. 추가로, 실제 쿠팡 데이터로 동작을 검증하는 과정에서 막혔던 크롤링/LLM 문제를 해결했다.

변경 내용

1) 비교 분석 기능 (commit 66629ba)

  • 도메인: ProductReviews/ProductSummary.is_mine, Analysis.my_url(Option), Insights.comparison_summary(additive)
  • DB: 00004_analysis_my_url.sqlanalyses.my_url 컬럼(nullable)
  • 서비스: create_analysis(my_url, competitor_urls, review_limit); 파이프라인에서 내 제품 먼저 크롤링(is_mine=true) 후 경쟁사 크롤링
  • 분석기: Mock/Gemini 를 비교 관점(내 제품 개선/경쟁사 약점/총평)으로 재작성
  • HTTP: CreateAnalysisRequest{my_url, competitor_urls}, 응답 뷰에 my_url 추가(기존 urls 유지)
  • FE: UrlInput 내 제품/경쟁사 분리 입력, 비교 총평 카드·내 제품/경쟁사 배지·평균평점 비교 헤더, AnalysisCard·types·dashboard 갱신
  • 테스트: BE 49 / FE 82 통과

2) 실데이터 크롤링·LLM 동작 (commit d3782b9)

  • 크롤러: COUPANG_COOKIE/COUPANG_UA 로 검증 쿠키 주입, COUPANG_USE_CURL 로 curl 위임(reqwest TLS 핑거프린트가 Akamai에 차단됨), 페이지당 size≤30 페이지네이션
  • Gemini: thinking 토큰이 출력 예산을 잠식해 JSON 이 잘리던 문제 → thinkingConfig.thinkingBudget=0 + maxOutputTokens 8192
  • 모두 env 게이트/기본 동작 불변, 코드에 시크릿 없음

검증

  • cargo check / cargo test (BE 49 통과)
  • npm run type-check / npm test -- --run (FE 82 통과)
  • 로컬 실데이터 E2E: 실제 쿠팡 리뷰 50+50 수집 → Gemini 실분석 → 비교 인사이트 생성 확인

주요 결정과 이유

  • 응답/DB는 가급적 additive(기존 urls/필드 유지)로 하위호환 확보; 요청 타입만 기능상 변경
  • 크롤링 우회/Gemini 수정은 env 게이트 옵트인 — 기본 빌드/CI 동작에 영향 없음

Wiki 반영 예정

  • API(요청/응답 스키마), Backend(크롤러 우회·페이지네이션·Gemini 설정), Frontend(입력/결과 UI)

참고 / 후속

  • 쿠키 replay 는 만료(수 시간)되므로 지속 운영엔 스크래핑 API 프록시(COUPANG_PROXY_URL) 권장
  • curl 위임은 로컬/옵트인 fallback. 장기적으로 TLS-impersonation 라이브러리 검토 여지

trz-21 and others added 2 commits June 16, 2026 09:28
링크 입력을 평면 urls(전부 경쟁사)에서 내 제품 URL(필수) + 경쟁 상품
URL(1~3개)로 분리해 받고, 두 제품군 리뷰를 비교하여 내 제품에서 개선할
점을 도출하도록 변경.

BE: ProductReviews/ProductSummary.is_mine, Analysis.my_url(+마이그레이션),
Insights.comparison_summary(additive), create_analysis(my_url,competitor_urls)
및 파이프라인 역할 구분 크롤링, Mock/Gemini 분석기 비교 관점 재작성,
핸들러 요청/뷰 갱신, 통합 테스트 보강.
FE: 입력 분리(UrlInput), 비교 총평/내제품 배지/평균평점 비교 헤더,
AnalysisCard·types·dashboard 갱신, 테스트 갱신.

Refs #34

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
쿠팡 Akamai 차단으로 실제 리뷰 수집이 막혀 비교 분석을 실데이터로
검증할 수 없던 문제를 해결한다.

크롤러(coupang):
- COUPANG_COOKIE/COUPANG_UA 로 실제 브라우저 검증 쿠키(_abck 등) 주입 지원
- COUPANG_USE_CURL 시 curl 로 위임(reqwest TLS 핑거프린트가 Akamai에 차단됨)
- 쿠팡 리뷰 API 의 페이지당 size 제한(~30)에 맞춘 페이지네이션
  (build_review_api_url 에 page 인자 추가, limit 까지 누적 수집)

분석기(gemini):
- gemini-2.5-flash thinking 토큰이 출력 예산을 잠식해 JSON 이 잘리던 문제
  (thinkingConfig.thinkingBudget=0 + maxOutputTokens 8192)

모두 env 게이트/기본 동작 변경 없음. 코드에 시크릿 없음.

Refs #34

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@trz-21 trz-21 merged commit 68da6f9 into main Jun 16, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

내 제품 vs 경쟁사 비교 분석 — 내 제품 개선점 도출

1 participant